﻿// 802 走路2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <memory.h>
using namespace std;
/*

http://oj.daimayuan.top/course/5/problem/255

蜗蜗的世界里有 n
 个城市，城市之间通过 m
 条单向高速公路连接，初始他在 1 号城市。蜗蜗想去 n
 号城市游玩，假设现在他在 x
 号城市，他会等概率地选择从 x
 出发的高速公路中的一条走过去。如果没有任何从 x
 号城里出发的高速公路，他就只能留在原地了。蜗蜗会一直走直到他无路可走。

请问蜗蜗有多大的概率能够走到 n
 号城市。

输入格式
第一行两个整数 n,m
。

接下来 m
 行，每行两个整数 x,y(1≤x<y≤n)
 描述一条从 x
 号城市到 y
 号城市的高速公路。

数据保证没有任何两条高速公路的 x,y
 是相同的。

注意，数据没有保证 1 号城市一定能走到 n
 号城市。

输出格式
一行一个数表示蜗蜗能够走到 n
 号城市的概率。由于答案是分数，请输出答案 mod 1e9+7。

样例输入
3 2
1 2
1 3
样例输出
500000004
数据范围
对于100%
的数据，2≤n≤100,1≤m≤1000。
*/

int n, m;
vector<int> c[101];
long long f[101];
const int p = 1000000007;

long long rp(long long now, int k) {
    long long res = 1;
    for (; k; k >>= 1, now *= now, now %= p)
        if (k & 1)
            res *= now, res %= p;
    return res;
}


int main()
{
    scanf("%d%d",&n,&m);
    for (int i = 1; i <= m; i++) {
        int x, y;
        scanf("%d%d", &x, &y);
        c[x].push_back(y);
    }
    memset(f, 0, sizeof f);
    f[1] = 1;
    for (int i = 1; i < n; i++) {
        int l = c[i].size();
        for (int j = 0; j < l; j++)
            f[c[i][j]] += f[i] * rp(l, p - 2),
            f[c[i][j]] %= p;
    }
    printf("%d\n", f[n]);

    return 0;
}

 